home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / MacOS 8 Resources / Developer Tools / Mac OS 8 Interfaces & Libraries / Interfaces / CIncludes / Pointing.h < prev    next >
C/C++ Source or Header  |  1996-05-01  |  6KB  |  203 lines

  1. /*
  2.      File:        Pointing.h
  3.  
  4.      Contains:    Pointer Family Interface
  5.  
  6.      Version:    Technology:    Copland
  7.                  Release:    Universal Interfaces 3.0d3 on Copland DR1
  8.  
  9.      Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10.  
  11.      Bugs?:        If you find a problem with this file, send the file and version
  12.                  information (from above) and the problem description to:
  13.  
  14.                      Internet:    apple.bugs@applelink.apple.com
  15.                      AppleLink:    APPLE.BUGS
  16.  
  17. */
  18. #ifndef __POINTING__
  19. #define __POINTING__
  20.  
  21. #ifndef __KERNEL__
  22. #include <Kernel.h>
  23. #endif
  24. #ifndef __NAMEREGISTRY__
  25. #include <NameRegistry.h>
  26. #endif
  27. #ifndef __TYPES__
  28. #include <Types.h>
  29. #endif
  30.  
  31. #ifdef __cplusplus
  32. extern "C" {
  33. #endif
  34.  
  35. #if PRAGMA_IMPORT_SUPPORTED
  36. #pragma import on
  37. #endif
  38.  
  39. #if PRAGMA_ALIGN_SUPPORTED
  40. #pragma options align=mac68k
  41. #endif
  42.  
  43. #if FOR_SYSTEM8_PREEMPTIVE
  44. /**************** Constants ****************/
  45.  
  46. enum {
  47.     kAnyDeviceClass                = 'anyp',
  48.     kMouseDeviceClass            = 'mous',
  49.     kTabletDeviceClass            = 'tblt',
  50.     kJoystickDeviceClass        = 'joys',
  51.     kTrackballDeviceClass        = 'trkb',
  52.     kTrackpadDeviceClass        = 'trkp',
  53.     k3DTrackballDeviceClass        = '3dtb'
  54. };
  55.  
  56.  
  57. enum {
  58.     kMinPTDataSize                = 24
  59. };
  60.  
  61.  
  62. enum {
  63.     kPointerFamilyError            = -1,
  64.     kPTUnknownRegEntryRef        = -2,
  65.     kPTInvalidTrackerRef        = -3,
  66.     kPTMemoryAllocationFailed    = -4,
  67.     kPTParamErr                    = -5
  68. };
  69.  
  70. typedef UInt16 PTDataRelation;
  71.  
  72. enum {
  73.     kAbsoluteData                = 1,
  74.     kRelativeData                = 2,
  75.     kAbsoluteOrRelativeData        = 3
  76. };
  77.  
  78. /**************** Public Data Structures ****************/
  79. /* old name is TrackerID */
  80. typedef struct OpaquePTTrackerRef* PTTrackerRef;
  81. typedef unsigned long PTButtonState;
  82. typedef PTButtonState *PTButtonStatePtr;
  83. struct PTPosition {
  84.     signed long                     x;
  85.     signed long                     y;
  86.     signed long                     z;
  87. };
  88. typedef struct PTPosition PTPosition;
  89.  
  90. typedef PTPosition *PTPositionPtr;
  91. /* old name is PointerData */
  92. struct PTData {
  93.     AbsoluteTime                     sequencingTag;
  94.     PTPosition                         position;
  95.     PTButtonState                     buttons;
  96.     void *                            uniqueDeviceData;
  97. };
  98. typedef struct PTData PTData;
  99.  
  100. typedef PTData *PTDataPtr;
  101. struct PTDeviceModes {
  102.     PTDataRelation                     relation;
  103.     void *                            uniqueDeviceModes;
  104. };
  105. typedef struct PTDeviceModes PTDeviceModes;
  106.  
  107. typedef PTDeviceModes *PTDeviceModesPtr;
  108. typedef OSType PTDeviceClass;
  109. struct PTDeviceIdentifier {
  110.     char                             identifier[255];
  111. };
  112. typedef struct PTDeviceIdentifier PTDeviceIdentifier;
  113.  
  114. typedef PTDeviceIdentifier *PTDeviceIdentifierPtr;
  115. struct PTDeviceCapabilities {
  116.     PTDeviceClass                     deviceClass;
  117.     ByteCount                         dataSize;
  118.     ByteCount                         modeDataSize;
  119.     PTDataRelation                     availableDataRelations;
  120.     PTDataRelation                     defaultDataRelation;
  121.     long                             latency;
  122.     Boolean                         imitatesMouse;
  123. };
  124. typedef struct PTDeviceCapabilities PTDeviceCapabilities;
  125.  
  126. typedef PTDeviceCapabilities *PTDeviceCapabilitiesPtr;
  127. struct PTPinningRectList {
  128.     short                             numRects;                    /* number of rects in list */
  129.     Rect *                            pinningRect;                /* pointer to a list of rects*/
  130.                                                                 /* rects must be in global coordinates, in pixels*/
  131. };
  132. typedef struct PTPinningRectList PTPinningRectList;
  133.  
  134. typedef PTPinningRectList *PTPinningRectListPtr;
  135. /**************** Client Interfaces ****************/
  136. /* *** Getting information about Devices *** */
  137. extern OSStatus PTGetNextDevice(RegEntryRef *currentDevice, PTDeviceClass filter, RegEntryRef **nextDevice);
  138.  
  139. extern OSStatus PTGetDeviceCapabilities(RegEntryRef *device, PTDeviceCapabilities *capabilities);
  140.  
  141. extern OSStatus PTGetDeviceIdentification(RegEntryRef *device, PTDeviceIdentifier *identification);
  142.  
  143. /* *** Setting Device Modes *** */
  144. extern OSStatus PTGetDeviceModes(RegEntryRef *device, ByteCount offset, ByteCount numBytes, PTDeviceModes *modes);
  145.  
  146. extern OSStatus PTSetDeviceModes(RegEntryRef *device, ByteCount offset, ByteCount numBytes, PTDeviceModes *modes);
  147.  
  148. /* *** Registering with the Pointing Family *** */
  149. /*
  150.      PTRegisterNewTracker:
  151.     The client provides a reference to device she wants a connection with,
  152.     and whether buffered and/or static data are needed.  A TrackerRef is
  153.     returned, which the client must use in all future communications with 
  154.     the Pointing Family.  In addition, the size of the PTData structure  
  155.     that the given device generates is returned.  
  156. */
  157. extern OSStatus PTRegisterNewTracker(RegEntryRef *device, Boolean bufferedData, Boolean stateData, PTTrackerRef *tracker, ByteCount *dataSize);
  158.  
  159. /* *** Maintaining Trackers *** */
  160. extern OSStatus PTSetPinningRects(PTTrackerRef tracker, PTPinningRectList *rectList);
  161.  
  162. /* *** Getting Data *** */
  163. /* DataSize indicates the size of the buffer allocated by the client for dataPtr. */
  164. extern OSStatus PTGetTrackerData(PTTrackerRef tracker, ByteCount dataSize, PTData *dataPtr);
  165.  
  166. extern OSStatus PTFlushTrackerBuffer(PTTrackerRef tracker);
  167.  
  168. /* *** Checking Tracker State *** */
  169. extern OSStatus PTGetPosition(PTTrackerRef tracker, PTPosition *position);
  170.  
  171. extern OSStatus PTSetPosition(PTTrackerRef tracker, PTPosition *position);
  172.  
  173. extern OSStatus PTMovePosition(PTTrackerRef tracker, PTPosition *position);
  174.  
  175. extern OSStatus PTGetButtons(PTTrackerRef tracker, PTButtonState *buttons);
  176.  
  177. extern OSStatus PTSetButtons(PTTrackerRef tracker, PTButtonState buttons);
  178.  
  179. extern OSStatus PTGetTrackerState(PTTrackerRef tracker, ByteCount dataSize, PTData *data);
  180.  
  181. extern OSStatus PTSetTrackerState(PTTrackerRef tracker, ByteCount dataSize, PTData *data);
  182.  
  183. extern OSStatus PTGetTrackerDataByOffset(PTTrackerRef tracker, ByteCount offset, ByteCount numBytes, void *buffer);
  184.  
  185. extern OSStatus PTSetTrackerDataByOffset(PTTrackerRef tracker, ByteCount offset, ByteCount numBytes, void *buffer);
  186.  
  187. #endif
  188.  
  189. #if PRAGMA_ALIGN_SUPPORTED
  190. #pragma options align=reset
  191. #endif
  192.  
  193. #if PRAGMA_IMPORT_SUPPORTED
  194. #pragma import off
  195. #endif
  196.  
  197. #ifdef __cplusplus
  198. }
  199. #endif
  200.  
  201. #endif /* __POINTING__ */
  202.  
  203.